// 订单录入明细录入列表
import React from 'react';
import { Card, Row, Col, Form, Icon, Table, Button, DatePicker, Select, Input, message, Popconfirm } from 'antd';
import ColumnAuthoritysModel from 'pages/columnAuthority/ColumnAuthoritysModel';
import { $http } from 'containers/config/https';
import store from 'store';
import Moment from 'moment';
import PublicModalTable from './../../../common/PublicModalTable';
import FormModalData from './../../../common/FormModalData';
import { Resizable } from 'react-resizable';

const ResizeableTitle = props => {
    const { onResize, width, ...restProps } = props;
  
    if (!width) {
      return <th {...restProps} />;
    }
  
    return (
      <Resizable
        width={width}
        height={0}
        onResize={onResize}
        draggableOpts={{ enableUserSelectHack: false }}
      >
        <th {...restProps} />
      </Resizable>
    );
};
const { Option } = Select;
const { TextArea } = Input;

const DetailEntryList = Form.create()(
    class extends React.Component {
        constructor() {
            super();
            this.state = {
                unitData: [], // 单位下拉框数据
                modalData: [], // 弹框列表数据
                ModalRowData: {}, // 弹框双击选中行数据
                data: [], // 列表数据
                detailInfo: [], // 入库制单回显至明细列表数据
                stockID: '', // 回显的描述id
                columns: [],
                modificationList: false,  //默认隐藏修改表头弹窗
                detailWidthTotal: '',
                rpTotal: 0, //进价金额总和
                spTotal: 0, //售价金额总和
                ChineseEnglishSize: {}, //中英数据
                language: JSON.parse(window.sessionStorage.userData),
            };
            this.columns = [
                {
                    key: 1,
                    title: '药品',
                    dataIndex: 'stockDesc',
                    align: "center",
                    width: '200px'
                },
                {
                    key: 2,
                    title: '数量',
                    dataIndex: 'qty',
                    align: "center",
                    width: '100px',
                },
                {
                    key: 3,
                    title: '单位',
                    dataIndex: 'unitDesc',
                    align: "center",
                    width: '200px',
                },
                {
                    key: 5,
                    title: '进价',
                    dataIndex: 'rp',
                    align: "center",
                    width: '100px',
                },
                {
                    key: 6,
                    title: '进价金额',
                    dataIndex: 'rpAmt',
                    align: "center",
                    width: '100px',
                },
                {
                    key: 7,
                    title: '售价',
                    dataIndex: 'sp',
                    align: "center",
                    width: '100px',
                },
                {
                    key: 8,
                    title: '售价金额',
                    dataIndex: 'spAmt',
                    align: "center",
                    width: '100px',
                },
                {
                    key: 10,
                    title: '生产厂家',
                    dataIndex: 'manfDesc',
                    align: "center",
                    width: '300px',
                },
                {
                    key: 11,
                    title: '备注',
                    dataIndex: 'remark',
                    align: "center",
                    width: '200px',
                },
                {
                    key: 12,
                    title: '到货日期',
                    dataIndex: 'preDate',
                    align: "center",
                    width: '100px',
                },{
                    title: '操作',
                    key: 13,
                    fixed: 'right',
                    align: "center",
                    width: '100px',
                    render: (text, record) => (
                        <span>
                        <Popconfirm title="删除不可恢复，你确定要删除吗?" onCancel={this.handlePopconfirm} onConfirm={(e) => this.handleDelete(record, e)} onClick={this.handlePopconfirm} >
                            <span className='span' style={{color: 'rgba(240,65,52,1)'}}>删除</span>
                        </Popconfirm>
                      </span>
                    ),
                }
            ];
            this.modalColumns = [
                {
                    key: 1,
                    title: '库存项代码',
                    dataIndex: 'stockCode',
                    align: "center",
                    width: '22%'
                },
                {
                    key: 2,
                    title: '库存项描述',
                    dataIndex: 'stockDesc',
                    align: "center",
                    width: '24%',
                },
                {
                    key: 5,
                    title: '库存分类',
                    dataIndex: 'stkSubCatDesc',
                    align: "center",
                    width: '16%',
                },
                {
                    key: 3,
                    title: '包装规格',
                    dataIndex: 'stockSpec',
                    align: "center",
                    width: '12%',
                },
                {
                    key: 6,
                    title: '基本单位',
                    dataIndex: 'baseUnitDesc',
                    align: "center",
                    width: '12%',
                },
                {
                    key: 7,
                    title: '入库单位',
                    dataIndex: 'purUnitDesc',
                    align: "center",
                }
            ];
            this.myRef1 = React.createRef();
			this.myRef2 = React.createRef();
			this.myRef3 = React.createRef();
			this.myRef4 = React.createRef();
			this.myRef5 = React.createRef();
			this.myRef6 = React.createRef();
			this.myRef7 = React.createRef();
			this.myRef8 = React.createRef();
            this.myRef9 = React.createRef();
            this.myRef10 = React.createRef();
			this.myRef11 = React.createRef();
			this.myRef12 = React.createRef();
            this.myRef13 = React.createRef();
            this.myRef14 = React.createRef();
        }
        components = {
            header: {
              cell: ResizeableTitle,
            },
        };
        componentDidMount() {
            this.props.onRef(this);
            this.getDetailTableColumns();
            let listData = document.querySelectorAll('.DedetailsHeight  .ant-table-body');
            if(listData.length>0){
                listData[0].style.height = store.getState().tableHeight.y - 55 + 'px';
            }
        }

        componentWillReceiveProps(props) {
            if (props.detailInfo !== this.state.detailInfo) {
                let arr =[...props.detailInfo];
                this.setState({data: arr, detailInfo: props.detailInfo},()=>{
                    let spNum = 0;
                    let rpNum = 0;
                    for(var f=0; f<arr.length; f++){
                        spNum = +arr[f].spAmt+spNum;
                        rpNum = +arr[f].rpAmt+rpNum;
                    }
                    this.setState({rpTotal: rpNum.toFixed(2),spTotal:spNum.toFixed(2)})
                });
            }
        }

        // 获取明系列表头数据
        getDetailTableColumns = () => {
            let {language} = this.state;
            let data = {
                params: [{
                    reactCode: ['materialPurchaseOEList'],
                    compontName: 'materialPurchaseOEList',
                    type: 'C',
                }]
            }
            $http.post('urlS', this, {
                code: '01040073',
                data: data,
                success: function (res) {
                    if (+res.errorCode === 0) {
                        let arr = res.result.C&&res.result.C.length > 0 ? JSON.parse(JSON.stringify(res.result.C)).map((item, index) => {
                            return  {
                                ...item,
                                key: index + 1,
                                title: <div onDoubleClick={() => {this.columnRef.onOpenModel();}}>{language.language== 'EN' ? item.enDescripts : item.title}</div>,
                                ellipsis: true
                            }
                        }) : '';
                        let filterArr = arr.filter(function(item){ return item.display === 'Y'});
                        let obj =  {
                            title: language.language== 'EN' ? 'Operation':'操作',
                            key: 13,
                            fixed: 'right',
                            align: "center",
                            width: '100px',
                            render: (text, record) => (
                                <span>
                        <Popconfirm title={language.language=='EN' ? 'Delete can not be restored, are you sure you want to delete it?' : '删除不可恢复，你确定要删除吗?'} onCancel={this.handlePopconfirm} onConfirm={(e) => this.handleDelete(record, e)} onClick={this.handlePopconfirm} >
                            <span className='span' style={{color: 'rgba(240,65,52,1)'}}>{language.language=='EN' ? 'Delete' : '删除'}</span>
                        </Popconfirm>
                      </span>
                            ),
                        };
                        filterArr.push(obj);
                        this.setState({columns: filterArr, detailWidthTotal: res.totalWidth, ChineseEnglishSize:  language.language=='EN' ? res.result.language.EN : res.result.language.CN},()=>{
                            this.props.handleThis.getChineseEnglishSize(this.state.ChineseEnglishSize)
                        })
                    }
                }
            })
        };

        // 点击删除时阻止事件冒泡
        handlePopconfirm = (e) => {
            e.stopPropagation();
        };

        onRef = (ref) => {
            this.child = ref;
        };

        // 保存成功后清空data数据
        deleteData() {
            this.setState({data: [], detailInfo: [], rpTotal: 0, spTotal: 0,});
        }

        // 获取单位下拉框数据
        getUnitData(id) {
            let data = {
				params: [
                    {
                        stockID: id, // 库存项Id
                    }
                ]
			};
			$http.post('urlS', this, {
				code: "02020043",
				data: data,
				success: function (res) {
					if (+res.errorCode === 0) {
						this.setState({ unitData: res.result})
					} else {
						this.setState({ unitData: [] })
					}
				}
			})
        }

        // 描述回车事件
        stockDescOnPressEnter = (e) => {
            let {ChineseEnglishSize} = this.state;
            let inOpLocDr = this.props.handleThis.getInOpLocDr();
            if (inOpLocDr) {
                let top = document.getElementById('stock-desc').getBoundingClientRect().top + 40 + 'px';
                let left = document.getElementById('stock-desc').getBoundingClientRect().left + 100 + 'px';
                this.setState({
                    top: top,
                    left: left
                });
                this.getModalListData(e.target.value);
                this.child.showModal();
            } else {
                message.info(ChineseEnglishSize.materialPurchaseOEListpleaseSelectTheDepartment ? ChineseEnglishSize.materialPurchaseOEListpleaseSelectTheDepartment.descripts:"请先选择科室");
            }
        };

        // 操作弹框
        onClickRowPublic = (record) => {
            return {
                onDoubleClick: () => {
                   this.confirmSelection(record);
                }
            }
        };

        // 双击选中行数据的回调
        confirmSelection = (record) => {
            this.resetFields();
            this.setState({ModalRowData: record}, () => {
                // 关闭弹窗
                this.child.handleCancel();
                // 获取单位下拉框数据
                this.getUnitData(record.stockID);
                this.props.form.setFieldsValue({stockDesc: record.stockDesc,uomDr: undefined});
            })
        };

        // 获取焦点的方法--描述
        stockDescOnFocus = () => {
            let inOpLocDr = this.props.handleThis.getInOpLocDr();
            // if (!inOpLocDr) {
            //     message.info("请先选择入库科室");
            // }
        };

        // 当描述失去焦点的时候
        stastockDescOnBlure = (e) => {
            if (this.state.ModalRowData && (e.target.value !== this.state.ModalRowData.stockDesc)) {
                this.props.form.setFieldsValue({stockDesc: undefined});
            }
        };

        // 获取描述列表数据
        getModalListData(alias) {
            let data = {
				params: [
                    {
                        stockAlias: alias, // 库存项描述别名
                    }
                ]
			};
			$http.post('urlS', this, {
				code: "02020042",
				data: data,
				success: function (res) {
					if (+res.errorCode === 0) {
                        for(var i = 0; i < res.result.length; i++) {
                            res.result[i].key = i
                        }
						this.setState({ modalData: res.result})
					} else {
						this.setState({ modalData: [] })
					}
				}
			})
        }

        // 新增明细录入
        addHandle = (obj) => {
            let {ChineseEnglishSize} = this.state;
            let inOpStatusDr = this.props.handleThis.state.userInfo ? this.props.handleThis.state.userInfo.stateCode: '';
            if (+inOpStatusDr < 20 || inOpStatusDr === undefined) {
                        let arr = [...this.state.data]; //  加...是深拷贝不改变内部结构
                        if (obj.key) {
                            for (let i = 0, len = arr.length; i < len; i++) {
                                if (arr[i].key === obj.key) {
                                    arr[i] = obj;
                                }
                            }
                        } else {
                            arr.push(obj);
                            for(let i = 0; i < arr.length; i++) {
                                !arr[i].key ?  arr[i].key= i + 'detail' : '';
                            }
                        }
                        this.setState({data: arr}, () => {
                            let spNum = 0;
                            let rpNum = 0;
                            for(var f=0; f<arr.length; f++){
                                spNum = +arr[f].spAmt+spNum;
                                rpNum = +arr[f].rpAmt+rpNum;
                            }
                            this.setState({rpTotal: rpNum.toFixed(2),spTotal:spNum.toFixed(2)})
                            this.childDesc.resetFields();
                            this.resetFields();
                            if (this.state.stockID && +inOpStatusDr < 20) {
                                this.props.handleThis.saveHandle()
                            }
                        });
            } else {
                message.error(ChineseEnglishSize.materialPurchaseOEListoperatedTips ? ChineseEnglishSize.materialPurchaseOEListoperatedTips.descripts:"当单据状态为保存时才可以进行操作");
            }
        };

        // 重置表单
        resetFields = () => {
            this.props.form.resetFields(); //清空所有
            this.setState({userInfo: {}, rowKey: '', stockID: ''});
            this.childDesc.resetFields();
        };

        // 删除
        handleDelete = (record, e) => {
            let {ChineseEnglishSize} = this.state;
            e.stopPropagation();
            if (record.PODetailID) {
                // 当inOpDetailID存在的话则删除接口明细、不存在的话切割数组当中的一个对象
                let inOpStatusDr = this.props.handleThis.state.userInfo ? this.props.handleThis.state.userInfo.stateCode: '';
                if (+inOpStatusDr < 20 || inOpStatusDr === undefined) {
                    let data = {
                        params: {
                            detail: [{
                                PODetailID:record.PODetailID ? record.PODetailID: undefined,
                            }]

                        }
                    }
                    $http.post('urlS', this, {
                        code: "02060074",
                        data: data,
                        success: function (res) {
                            if (+res.errorCode === 0) {
                                message.success(res.errorMessage);
                                this.deleteRow(record.key);
                                this.props.handleThis.setState({statusCode: ''});
                            }
                        }
                    })
                } else {
                    message.error(ChineseEnglishSize.materialPurchaseOEListoperatedTips ? ChineseEnglishSize.materialPurchaseOEListoperatedTips.descripts:"当单据状态为保存时才可以进行操作");
                }
            } else {
                this.setState({userInfo: {}, rowKey: '', stockID: ''});
                this.deleteRow(record.key);
            }
        };

        // 本地删除数据
        deleteRow(key){
            const dataSource = JSON.parse(JSON.stringify(this.state.data));
            this.setState({ data: dataSource.filter(item => item.key !== key)},()=>{
                let spNum = 0;
                let rpNum = 0;
                for(var f=0; f<this.state.data.length; f++){
                    spNum = +this.state.data[f].spAmt+spNum;
                    rpNum = +this.state.data[f].rpAmt+rpNum;
                }
                this.setState({rpTotal: rpNum.toFixed(2),spTotal:spNum.toFixed(2)})
            });
        }

        // 设置行属性
        onClickRow = (record) => {
            return {
                // 单击行选中
                onClick: (e) => {
                    e.stopPropagation();
                    this.resetFields();
                    if (this.state.rowKey === '') {
                        // 保存行数据以及ID
                        this.setState({rowKey: record.key, userInfo: record, stockID: record.stockID});
                        this.getUnitData(record.stockID);
                    } else {
                        if (this.state.rowKey !== record.key) {
                            this.setState({rowKey: record.key, userInfo: record, stockID: record.stockID});
                            this.getUnitData(record.stockID);
                        } else {
                            this.setState({rowKey: '', userInfo: {}, stockID: '', unitData: []});
                            this.childDesc.resetFields();
                        }
                    }
                }
            }
        };

        initialDataObj=()=>{
            var initialObj = {};
            let { userInfo } = this.state;

            initialObj.manfDesc = userInfo.manfID ? userInfo.manfID : '';
            initialObj.preDate = userInfo.preDate ? userInfo.preDate : '';
            initialObj.qty = userInfo.qty ? userInfo.qty+'' : '';
            initialObj.remark = userInfo.remark ? userInfo.remark : '';
            initialObj.rp = userInfo.rp ? userInfo.rp+'' : '';
            initialObj.sp = userInfo.sp ? userInfo.sp+'' : '';
            initialObj.stockDesc = userInfo.stockDesc ? userInfo.stockDesc : '';
            initialObj.unitDesc = userInfo.unitDesc ? userInfo.unitDesc : '';
            return initialObj;
        }
    
        // 表格行的类名
        setRowClassName = (record) => {
            return record.key === this.state.rowKey ? 'clickRowStyle' : '';
        };

        //检查表单是否有未保持数据
        checkFormData=()=>{
            let newObjData = {};
           let stockDesc =this.props.form.getFieldValue('stockDesc');
           let qty =this.props.form.getFieldValue('qty');
           let rp =this.props.form.getFieldValue('rp');
           let sp =this.props.form.getFieldValue('sp');
           let descripts =this.props.form.getFieldValue('descripts');
           let manfID =this.props.form.getFieldValue('manfID');
           let preDate =this.props.form.getFieldValue('preDate');
           let remark =this.props.form.getFieldValue('remark');
           if(manfID == undefined){
                newObjData.manfDesc = '';
            }else {
                newObjData.manfDesc = manfID;
            }
            if(preDate == undefined){
                newObjData.preDate = '';
            }else {
                newObjData.preDate = Moment(preDate).format('YYYY-MM-DD');
            }
            if(qty == undefined){
                newObjData.qty = '';
            }else {
                newObjData.qty = qty+'';
            }
            if(remark == undefined){
                newObjData.remark = '';
            }else {
                newObjData.remark = remark;
            }
            if(rp == undefined){
                newObjData.rp = '';
            }else {
                newObjData.rp = rp+'';
            }
            if(sp == undefined){
                newObjData.sp = '';
            }else {
                newObjData.sp = sp+'';
            }
            if(stockDesc == undefined){
                newObjData.stockDesc = '';
            }else {
                newObjData.stockDesc = stockDesc;
            }
            if(descripts == undefined){
                newObjData.unitDesc = '';
            }else {
                newObjData.unitDesc = descripts;
            }
            return newObjData;
        };
        //组件权限编辑器
        onColumnRef = (ref) => {
            this.columnRef = ref;
        };

        //药品名称为空时清除表单数据
        clearData=(val)=>{
            if(!val.target.value){
                this.setState({userInfo: {}});
            }
        };
        //组件权限编辑器
        childDesc = (ref) => {
            this.childDesc = ref;
        };
        // 收起明细录入
        packUpHandle = () => {
            this.setState({show: !this.state.show})
        };
        handleResize = index => (e, { size }) => {
            this.setState(({ columns }) => {
              const nextColumns = [...columns];
              nextColumns[index] = {
                ...nextColumns[index],
                width: parseInt(size.width),
              };
              return { columns: nextColumns };
            });
        };
        render() {
            const formItemInput  = {
                labelCol: {
                    span: 8
                },
                wrapperCol: {
                    span: 16
                },
            };
            const formItemInputText  = {
                labelCol: {
                    span: 4
                },
                wrapperCol: {
                    span: 20
                },
            };
            const { getFieldDecorator } = this.props.form;
            let { detailWidthTotal,ChineseEnglishSize } = this.state;
            const columns = this.state.columns.map((col, index) => ({
                ...col,
                onHeaderCell: column => ({
                  width: parseInt(column.width),
                  onResize: this.handleResize(index),
                }),
            }));
            let userInfo = this.state.userInfo ? this.state.userInfo: {};
            let param = {
                width: '600px',
                top: this.state.top,
                left: this.state.left,
                columns: this.modalColumns,
                data: this.state.modalData,
                isOnRow: true,
                TableClassName: 'tab-placeholder',
            };
            //别名接口需要的参数
            let parameData = {
                locID: this.props.inOpLocDr ? this.props.inOpLocDr : JSON.parse(window.sessionStorage.userData).locID ?  JSON.parse(window.sessionStorage.userData).locID : '',
            }
            return (
                <div>
                    <Row>
                        <Col span={10} style={{display: this.state.show ? 'none' : ''}} className={!this.state.show ? "animate-wrap active down-in" : "animate-wrap"}>
                            <Card
                                size="small"
                                title={<div className="card-title-left-icon"><div></div>{ChineseEnglishSize.materialPurchaseOEListpurchasingEntryInfo ? ChineseEnglishSize.materialPurchaseOEListpurchasingEntryInfo.descripts:'采购录入信息'}</div>}
                            >
                                <div style={{height: store.getState().tableHeight.y + 14 + 'px', overflow: 'auto'}} className="InPurPlan-detail-left">
                                    <FormModalData parameter='PurchaseOrderEntry' parameData={parameData} APICode='02060077'stockCode='02060013'  unitData={this.state.unitData}  SelectData={ this.props.SelectData} rowKey={this.state.rowKey} userInfo={this.state.userInfo} handelThis={this} onRef={this.childDesc}/>
                                </div>
                            </Card>
                        </Col>
                        <Col span={this.state.show ? 24 : 14}>
                            <Card
                                size="small"
                                title={<span><Icon onClick={this.packUpHandle} type={this.state.show ? 'double-right' : 'double-left'} />{ChineseEnglishSize.materialPurchaseOEListpurchaseEntryList ? ChineseEnglishSize.materialPurchaseOEListpurchaseEntryList.descripts:'采购录入列表'}</span>}
                                extra={<span style={{color: '#666'}} className='span' onClick={() => { this.columnRef.onOpenModel();}}><Icon type="setting" title={ChineseEnglishSize.materialPurchaseOEListcolumnSettings ? ChineseEnglishSize.materialPurchaseOEListcolumnSettings.descripts:'列权限设置'} /></span>}
                            >
                                <div style={{height: store.getState().tableHeight.y -7 + 'px'}}>
                                    <Table
                                        columns={columns.length>0 ? columns : this.columns}
                                        components={this.components}
                                        dataSource={this.state.data}
                                        pagination={false}
                                        bordered
                                        scroll={{ x: detailWidthTotal ? detailWidthTotal : 1620, y: store.getState().tableHeight.y - 50 }}
                                        onRow={this.onClickRow}
                                        rowClassName={this.setRowClassName}
                                        className="DedetailsHeight"
                                    />
                                </div>
                                <Col style={{fontSize: '15px' ,fontWeight: '700', marginLeft: '18px'}}>
                                    <span >{ChineseEnglishSize.materialPurchaseOEListrpTotal ? ChineseEnglishSize.materialPurchaseOEListrpTotal.descripts:'进价金额总价'}：</span><span>{this.state.rpTotal} </span>
                                    <span style={{marginLeft: '50px'}}>  {ChineseEnglishSize.materialPurchaseOEListspTotal ? ChineseEnglishSize.materialPurchaseOEListspTotal.descripts:'售价金额总价'}：</span><span>{this.state.spTotal}</span>
                                    <span style={{ marginLeft: '50px' }}> 总条数 ：</span><span>{this.state.data && this.state.data.length ? this.state.data.length : 0}</span>
                                </Col>
                            </Card>
                        </Col>
                    </Row>
                    <PublicModalTable onClickRowPublic={this.onClickRowPublic} setRowClassNamePublic={this.setRowClassNamePublic} param={param} onRef={this.onRef} />
                    <ColumnAuthoritysModel
                        clientWidth='800px'
                        compontName='materialPurchaseOEList'
                        configType="C"
                        onRef={this.onColumnRef}
                        reloadData={this.getDetailTableColumns}

                    />
                </div>
            )
        }
    }
);

export default DetailEntryList;